/**
 * 
 */
package com.mbengue.corp.apr.ra.dao;

import java.util.Date;
import java.util.List;

import org.hibernate.HibernateException;

import com.mbengue.corp.apr.ra.core.Article;
import com.mbengue.corp.apr.ra.core.Membre;

/**
 * Gere l'ajout, la modification, la suppression et la recherche d'article
 * 
 * @author MMB11447
 *
 */
public interface ArticleDao {
  /**
   * Ajoute l'article donne en entree dans la base de donnees
   * 
   * @param article {@link Article} a ajouter
   * @throws HibernateException
   */
  public void ajouterArticle(Article article) throws HibernateException;

  /**
   * Retrouve l'article dont le titre est donne en entree
   * 
   * @param titre {@link String} de l'article a retrouver
   * @return {@link Article} correspondant au titre
   * @throws HibernateException
   */
  public Article trouverArticle(String titre) throws HibernateException;

  /**
   * Met a jour l'article dans la base de donnees
   * 
   * @param article {@link Article} a mettre a jour
   * @throws HibernateException
   */
  public void modifierArticle(Article article) throws HibernateException;

  /**
   * Supprime l'article de la base de donnees 
   * @param article
   * @return
   * @throws HibernateException
   */
  public boolean supprimerArticle(Article article);

  /**
   * Retourne tous les articles de la base de donnees
   * 
   * @return {@link List} d'article
   * @throws HibernateException
   */
  public List<Article> tousLesArticles() throws HibernateException;

  /**
   * Retourne tous les articles dont l'auteur est donne en entree
   * 
   * @param membre {@link Membre} auteur des articles
   * @return {@link List} d'article de l'auteur
   * @throws HibernateException
   */
  public List<Article> lesArticlesD1Auteur(Membre membre) throws HibernateException;

  /**
   * Retourne les dix articles les plus recents
   * 
   * @return {@link List} d'article
   * @throws HibernateException
   */
  public List<Article> lesArticlesRecents() throws HibernateException;

  /**
   * Retourne tous les articles qui sont des proces verbaux
   * 
   * @return {@link List} de proces verbaux
   * @throws HibernateException
   */
  public List<Article> tousLesPvDeReunion() throws HibernateException;

  /**
   * Retourne tous les articles creer entre les deux dates
   * @param aDebut
   * @param aFin
   * @return {@link List}
   */
  public List<Article> findArticlesParDates(Date aDebut, Date aFin, String type);

  public List<Article> findArticlesParTitre(String aTitre, String type);
}
